using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using 凌依.工具库;

public class 存档路径管理 : 单例_基础管理器<存档路径管理>
{
    public Dictionary<string, 存档路径集合> 存档列表 = new Dictionary<string, 存档路径集合>();
    public Dictionary<string, 地图路径集合> 地图列表 = new Dictionary<string, 地图路径集合>();

    public 存档路径管理()
    {
        重新加载存档列表();
    }

    public void 重新加载存档列表()
    {
        if (!IO函数.检查_文件夹是否存在(全局路径.获取存档路径))
            IO操作.文件夹_创建(全局路径.获取存档路径);

        if (!IO函数.检查_文件夹是否存在(全局路径.获取地形数据路径))
            IO操作.文件夹_创建(全局路径.获取地形数据路径);

        List<string> 存档路径列表 = IO函数.文件夹_子集(全局路径.获取存档路径, IO函数.文件返回类型.文件夹名称);
        foreach (var item in 存档路径列表)
            存档列表.Add(item, new 存档路径集合(item));

        List<string> 地图路径列表 = IO函数.文件夹_子集(全局路径.获取地形数据路径, IO函数.文件返回类型.文件夹名称);
        foreach (var item in 地图路径列表)
            地图列表.Add(item, new 地图路径集合(item));
    }

    public string 防止重名<T>(string oldName,Dictionary<string,T> 集合)
    {
        string 使用名 = oldName;
        int 重名数 = 1;
        while (集合.ContainsKey(使用名))
        {
            使用名 = $"{oldName}({重名数})";
            重名数++;
        }
        return 使用名;
    }

    public 存档路径集合 创建存档文件夹(string 存档名)
    {
        string 使用名 = 防止重名(存档名, 存档列表);
        存档列表.Add(使用名,new 存档路径集合(使用名));

        //IO创建
        string 存档路径 = 全局路径.获取存档路径 + 使用名;
        IO操作.文件夹_创建(存档路径);
        return 存档列表[使用名];
    }
    public 地图路径集合 创建地图文件夹(string 地图名)
    {
        string 使用名 = 防止重名(地图名, 地图列表); ;
        地图列表.Add(使用名,new 地图路径集合(使用名));

        //IO创建
        string 存档路径 = 全局路径.获取地形数据路径 + 使用名;
        IO操作.文件夹_创建(存档路径);
        return 地图列表[使用名];
    }
}

[System.Serializable]
public class 存档路径集合
{
    public string 存档名;
    public string 地图数据路径;
    public string 地图数据配置路径;

    public 存档路径集合(string 存档名)
    {
        this.存档名 = 存档名;
        IO操作.文件夹_创建(全局路径.获取存档路径 + 存档名 + "/地图");
        this.地图数据路径 = 全局路径.获取存档路径 + 存档名 + "/地图/地图数据.json";
        this.地图数据配置路径 = 全局路径.获取存档路径 + 存档名 + "/地图/地图数据配置.json";
    }
}
[System.Serializable]
public class 地图路径集合
{
    public string 地图名;
    public string 预览图路径;
    public string 地图数据路径;
    public string 地图数据配置路径;

    public 地图路径集合(string 地图名)
    {
        this.地图名 = 地图名;
        预览图路径 = 全局路径.获取地形数据路径 + 地图名 + "/预览图.png";
        地图数据路径 = 全局路径.获取地形数据路径 + 地图名 + "/地图数据.json";
        地图数据配置路径 = 全局路径.获取地形数据路径 + 地图名 + "/地图数据配置.json";
    }
}
[System.Serializable]
public class 角色预设路径集合
{
    public string 角色名;
    public string 配置数据路径;
}
